package com.witmore.neutron.ai.web.wechat.utils;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.jk.common.enums.WitmoreErrorCode;
import com.jk.common.exception.WitmoreException;
import com.witmore.neutron.ai.web.wechat.ak.AkshareService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Map;

/**
 * Description: StockUtil
 * Author: 豆子高
 * Date: 2025/8/21 10:39
 */
@Slf4j
@Service
public class StockUtil {

    @Autowired
    private AkshareService akshareService;

    /**
     * 校验股票代码格式和有效性
     *
     * @param stockCodes 股票代码字符串
     * @return 校验失败时返回错误响应，校验通过时返回null
     */
    public Map<String, String> validateStockCodes(String stockCodes) {
        if (stockCodes == null || stockCodes.trim().isEmpty()) {
            throw new WitmoreException(WitmoreErrorCode.PARAM_ERROR, "股票代码不能为空");
        }

        // 检查是否包含中文逗号 替换成英文逗号
        if (stockCodes.contains("，")) {
            stockCodes = stockCodes.replace("，", ",");
        }

        // 分割股票代码
        String[] codes = stockCodes.split(",");

        // 收集有效的股票代码和对应的股票名称
        Map<String, String> validStockMap = new java.util.HashMap<>();
        java.util.List<String> invalidCodes = new java.util.ArrayList<>();

        for (String code : codes) {
            String trimmedCode = code.trim();

            // 检查代码是否为空
            if (trimmedCode.isEmpty()) {
                continue;
            }

            // 检查股票代码格式（6位数字）
            if (!trimmedCode.matches("^\\d{6}$")) {
                invalidCodes.add(trimmedCode);
                continue;
            }

            // 校验股票代码是否正确（调用AKShare接口）
            try {
                String response = akshareService.stockIndividualInfoEm(trimmedCode);

                // 解析返回的JSON数据
                ObjectMapper objectMapper = new ObjectMapper();
                JsonNode rootNode = objectMapper.readTree(response);

                // 检查是否为空数据
                if (rootNode == null || rootNode.isEmpty()) {
                    invalidCodes.add(trimmedCode);
                    continue;
                }

                // 查找股票简称
                String stockName = null;
                for (JsonNode itemNode : rootNode) {
                    if (itemNode.has("item") && "股票简称".equals(itemNode.get("item").asText())) {
                        stockName = itemNode.get("value").asText();
                        break;
                    }
                }

                // 如果找到股票简称，则认为是有效股票代码
                if (stockName != null && !stockName.trim().isEmpty()) {
                    validStockMap.put(trimmedCode, stockName);
                } else {
                    invalidCodes.add(trimmedCode);
                }

            } catch (Exception e) {
                log.error("校验股票代码 {} 时发生异常: {}", trimmedCode, e.getMessage());
                invalidCodes.add(trimmedCode);
            }
        }

        // 检查是否有无效的股票代码
        if (!invalidCodes.isEmpty()) {
            String errorMsg = "以下股票代码无效：" + String.join(", ", invalidCodes);
            validStockMap.put("invalidCodes", errorMsg);
        }
        return validStockMap;
    }
}
